]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
status/bluetooth: Port to quick settings
authorFlorian Müllner <fmuellner@gnome.org>
Tue, 26 Jul 2022 08:45:35 +0000 (10:45 +0200)
committerMarge Bot <marge-bot@gnome.org>
Tue, 2 Aug 2022 16:05:28 +0000 (16:05 +0000)
For now, this is another simple toggle. The icon, state and
visibility reflect what the old menu did, and the top bar
icon is still only shown when devices are currently connected.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2392>

js/ui/panel.js
js/ui/status/bluetooth.js

index bdcd8f9f81c3c1bfa0c01baecfc743733cb929a3..614f71606b169c1e201d6522996b8f294c827e6d 100644 (file)
@@ -378,11 +378,6 @@ class AggregateMenu extends PanelMenu.Button {
         else
             this._network = null;
 
-        if (Config.HAVE_BLUETOOTH)
-            this._bluetooth = new imports.ui.status.bluetooth.Indicator();
-        else
-            this._bluetooth = null;
-
         this._power = new imports.ui.status.power.Indicator();
         this._powerProfiles = new imports.ui.status.powerProfiles.Indicator();
         this._volume = new imports.ui.status.volume.Indicator();
@@ -391,8 +386,6 @@ class AggregateMenu extends PanelMenu.Button {
 
         if (this._network)
             this._indicators.add_child(this._network);
-        if (this._bluetooth)
-            this._indicators.add_child(this._bluetooth);
         this._indicators.add_child(this._volume);
         this._indicators.add_child(this._power);
         this._indicators.add_child(this._powerProfiles);
@@ -403,9 +396,6 @@ class AggregateMenu extends PanelMenu.Button {
         if (this._network)
             this.menu.addMenuItem(this._network.menu);
 
-        if (this._bluetooth)
-            this.menu.addMenuItem(this._bluetooth.menu);
-
         this.menu.addMenuItem(this._power.menu);
         this.menu.addMenuItem(this._powerProfiles.menu);
         this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
@@ -429,6 +419,11 @@ class QuickSettings extends PanelMenu.Button {
 
         this.setMenu(new QuickSettingsMenu(this, N_QUICK_SETTINGS_COLUMNS));
 
+        if (Config.HAVE_BLUETOOTH)
+            this._bluetooth = new imports.ui.status.bluetooth.Indicator();
+        else
+            this._bluetooth = null;
+
         this._remoteAccess = new imports.ui.status.remoteAccess.RemoteAccessApplet();
         this._location = new imports.ui.status.location.Indicator();
         this._thunderbolt = new imports.ui.status.thunderbolt.Indicator();
@@ -440,12 +435,16 @@ class QuickSettings extends PanelMenu.Button {
         this._indicators.add_child(this._thunderbolt);
         this._indicators.add_child(this._location);
         this._indicators.add_child(this._nightLight);
+        if (this._bluetooth)
+            this._indicators.add_child(this._bluetooth);
         this._indicators.add_child(this._rfkill);
         this._indicators.add_child(this._unsafeMode);
 
         this._addItems(this._remoteAccess.quickSettingsItems);
         this._addItems(this._thunderbolt.quickSettingsItems);
         this._addItems(this._location.quickSettingsItems);
+        if (this._bluetooth)
+            this._addItems(this._bluetooth.quickSettingsItems);
         this._addItems(this._nightLight.quickSettingsItems);
         this._addItems(this._rfkill.quickSettingsItems);
         this._addItems(this._unsafeMode.quickSettingsItems);
index fe5956c0019e434d53018679ef77024552ef2f33..aed017a47769e687a836fe2f5af22ed3adc95b4e 100644 (file)
@@ -1,13 +1,11 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported Indicator */
 
-const { Gio, GLib, GnomeBluetooth, GObject } = imports.gi;
+const {Gio, GLib, GnomeBluetooth, GObject} = imports.gi;
 
-const Main = imports.ui.main;
-const PanelMenu = imports.ui.panelMenu;
-const PopupMenu = imports.ui.popupMenu;
+const {QuickToggle, SystemIndicator} = imports.ui.quickSettings;
 
-const { loadInterfaceXML } = imports.misc.fileUtils;
+const {loadInterfaceXML} = imports.misc.fileUtils;
 
 const BUS_NAME = 'org.gnome.SettingsDaemon.Rfkill';
 const OBJECT_PATH = '/org/gnome/SettingsDaemon/Rfkill';
@@ -149,32 +147,42 @@ const BtClient = GObject.registerClass({
     }
 });
 
+const BluetoothToggle = GObject.registerClass(
+class BluetoothToggle extends QuickToggle {
+    _init(client) {
+        super._init({label: _('Bluetooth')});
+
+        this._client = client;
+
+        this._client.bind_property('available',
+            this, 'visible',
+            GObject.BindingFlags.SYNC_CREATE);
+        this._client.bind_property('active',
+            this, 'checked',
+            GObject.BindingFlags.SYNC_CREATE);
+        this._client.bind_property_full('active',
+            this, 'icon-name',
+            GObject.BindingFlags.SYNC_CREATE,
+            (bind, source) => [true, source ? 'bluetooth-active-symbolic' : 'bluetooth-disabled-symbolic'],
+            null);
+
+        this.connect('clicked', () => this._client.toggleActive());
+    }
+});
+
 var Indicator = GObject.registerClass(
-class Indicator extends PanelMenu.SystemIndicator {
+class Indicator extends SystemIndicator {
     _init() {
         super._init();
 
-        this._indicator = this._addIndicator();
-        this._indicator.icon_name = 'bluetooth-active-symbolic';
-
         this._client = new BtClient();
-        this._client.connectObject(
-            'notify::active', () => this._sync(),
-            'devices-changed', () => this._sync(), this);
+        this._client.connect('devices-changed', () => this._sync());
 
-        this._item = new PopupMenu.PopupSubMenuMenuItem(_('Bluetooth'), true);
-        this._client.bind_property('available',
-            this._item, 'visible',
-            GObject.BindingFlags.SYNC_CREATE);
-
-        this._toggleItem = new PopupMenu.PopupMenuItem('');
-        this._toggleItem.connect('activate', () => this._client.toggleActive());
-        this._item.menu.addMenuItem(this._toggleItem);
+        this._indicator = this._addIndicator();
+        this._indicator.icon_name = 'bluetooth-active-symbolic';
 
-        this._item.menu.addSettingsAction(_('Bluetooth Settings'), 'gnome-bluetooth-panel.desktop');
-        this.menu.addMenuItem(this._item);
+        this.quickSettingsItems.push(new BluetoothToggle(this._client));
 
-        Main.sessionMode.connect('updated', this._sync.bind(this));
         this._sync();
     }
 
@@ -183,24 +191,6 @@ class Indicator extends PanelMenu.SystemIndicator {
         const connectedDevices = devices.filter(dev => dev.connected);
         const nConnectedDevices = connectedDevices.length;
 
-        let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
-
-        this.menu.setSensitive(sensitive);
         this._indicator.visible = nConnectedDevices > 0;
-
-        this._item.icon.icon_name = this._client.active
-            ? 'bluetooth-active-symbolic' : 'bluetooth-disabled-symbolic';
-
-        if (nConnectedDevices > 1)
-            /* Translators: this is the number of connected bluetooth devices */
-            this._item.label.text = ngettext('%d Connected', '%d Connected', nConnectedDevices).format(nConnectedDevices);
-        else if (nConnectedDevices === 1)
-            this._item.label.text = connectedDevices[0].alias;
-        else if (this._client.active)
-            this._item.label.text = _('Bluetooth On');
-        else
-            this._item.label.text = _('Bluetooth Off');
-
-        this._toggleItem.label.text = this._client.active ? _('Turn Off') : _('Turn On');
     }
 });